package com.yami.shop.vo.message.message;

import com.yami.shop.vo.advice.AdviceTxtVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PrivateMessageVo implements Serializable {

    @NotEmpty(message = "发送人id不能为空")
    @Schema(description = "发送人id", required = true)
    private String senderId;

    @NotEmpty(message = "接收方不能为空")
    @Schema(description = "接收方id", required = true)
    private List<String> targetId;

    @NotEmpty(message = "消息类型不能为空")
    @Schema(description = "消息类型(RC:TxtMsg、RC:ImgMsg、RC:VcMsg、RC:ImgTextMsg、RC:FileMsg、RC:LBSMsg)", required = true)
    private String objectName = "RC:TxtMsg";

    @Schema(description = "消息内容")
    private AdviceTxtVo content;

    @Schema(description = "透传信息")
    private String pushData;

    @Schema(description = "仅目标用户为 iOS 设备有效，Push 时用来控制桌面角标未读消息数，只有在 toUserId 为一个用户 ID 时有效，客户端获取远程推送内容时为 badge。具体参见获取推送内容。为 -1 时不改变角标数，传入相应数字表示把角标数改为指定的数字，最大不超过 9999。")
    private String count;

    @Schema(description = "是否过滤接收用户黑名单列表，0 表示为不过滤、 1 表示为过滤，默认为 0。")
    private Integer verifyBlacklist;

    @Schema(description = "是否需要在融云服务端历史消息记录中存储此条消息。0 表示为不存储、1 表示为存储（依赖单群聊消息云端存储服务功能）。默认为 1。此属性不影响离线消息功能，用户未在线时都会转为离线消息存储。")
    private Integer isPersisted;

    @Schema(description = "指定消息发送者是否可在客户端接收该消息（已发消息）。注意，融云默认不会为消息发送者保存从服务端发送的消息。\n" +
            "0，默认值，表示不接收。发送者的客户端无法获取该条已发消息。\n" +
            "1，表示接收，分两种情况：\n" +
            "发送者已登陆客户端（在线）：发送者客户端即时收到该消息。\n" +
            "发送者未登陆客户端（离线）：注意，必须在开发者后台 IM 商用版页面开通多设备消息同步功能，才可能在再次上线时收到该消息。")
    private Integer IsIncludeSender;

    @Schema(description = "参数支持设置消息推送通知的标题、推送内容模板、是否强制通知及推送 ChannelID 等。pushExt 为 JSON 结构请求时需要做转义处理。")
    private PrivateMessagePushExtVo pushExtVo;

}
